#include<iostream>
#include<string>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=12;
vector<int> levelans;
vector<int> inans;
int N;
struct node{
    int data;
    int lchild=-1;
    int rchild=-1;
}Node[maxn];

void levelorder(int root){
    queue<int> que;
    while(!que.empty())que.pop();
    que.push(root);
    int tmp;
    while(!que.empty()){
        tmp=que.front();que.pop();
        levelans.push_back(tmp);
        if(Node[tmp].rchild!=-1) que.push(Node[tmp].rchild);
        if(Node[tmp].lchild!=-1) que.push(Node[tmp].lchild);
    }

}
void inorder(int root){
    if(root==-1) return;
    inorder(Node[root].rchild);
    inans.push_back(root);
    inorder(Node[root].lchild);
}
int main(){
    //freopen("in.txt","r",stdin);
    scanf("%d",&N);
    bool flag[N];
    memset(flag,false,sizeof(flag));
    string lchild,rchild;
    for(int i=0;i<N;i++){
        cin>>lchild>>rchild;
        if(lchild!="-"){
            Node[i].lchild=stoi(lchild);
            flag[stoi(lchild)]=true;
        }
        if(rchild!="-"){
            Node[i].rchild=stoi(rchild);
            flag[stoi(rchild)]=true;
        }
    }
    int root;
    for(int i=0;i<N;i++){
        if(flag[i]==false){
            root=i;
            break;
        }
    }
    levelorder(root);
    inorder(root);
    for(int i=0;i<N;i++){
        if(i==0)printf("%d",levelans[i]);
        else printf(" %d",levelans[i]);
    }
    printf("\n");
    for(int i=0;i<N;i++){
        if(i==0) printf("%d",inans[i]);
        else printf(" %d",inans[i]);
    }



}
